Создание таблицы (CREATE TABLE)

Функция

Определение базовой таблицы или глобальной временной таблицы.

Спецификация
                                                               
<​кодировка символьных данных таблицы​>::=
[CHARACTER SET "кодировка"]
<​встроенная кодировка​>::=
DEFAULT|UTF-8
<​идентификатор кодировки​>::=
строка системной таблицы $$$CHARSET
<​тип данных​>::=
{
{CHAR | CHARACTER} [(длина)] [CHARACTER SET "кодировка"]
|{VARCHAR | CHARACTER VARYING | CHAR VARYING} (длина)
[CHARACTER SET "кодировка"]
|BYTE [(длина)]
|{VARBYTE | BYTE VARYING}(длина)
|SMALLINT
|{INTEGER | INT}
|BIGINT
|REAL
|DOUBLE [PRECISION]
|FLOAT [(точность)]
|{DECIMAL | DEC | NUMERIC}[(точность[, мантисса])]
|DATE
|BOOLEAN
|{NCHAR | NATIONAL CHAR | NATIONAL CHARACTER} [(длина)]
|{NCHAR VARYING | NATIONAL CHAR VARYING|NVARCHAR
|NATIONAL CHARACTER VARYING} (длина)
|{BLOB | LONG RAW} [CHARACTER SET "кодировка"]
|EXTFILE [ROOT 'каталог']
}
<​подставляемое значение​>::=
<​значение по умолчанию​>::=
<​задаваемое значение​>::=
{SYSDATE | NOW}
|{LOCALTIME | LOCALTIMESTAMP}
|CURRENT_DATE
|{CURRENT_TIME | CURRENT_TIMESTAMP}
|NULL
|USER
<​вычисляемое значимое​>::=
<​фильтр для фразового поиска​>::=
DEFAULT FILTER имя фильтра
<​мандатный уровень доступа к таблице​>::=
LEVEL (RAL, WAL)
<​мандатный уровень доступа к столбцу​>::=
LEVEL (RAL, WAL)
<​автоматическое наращивание значений​>::=
{AUTOROWID | AUTOINC [INITIAL (начальное значение)] | AUTOINC RANGE(диапазон)}
<​ограничение NULL-значений​>::=
{NOT NULL | NULL}
<​ограничение уникальности​>::=
PRIMARY KEY
|UNIQUE
|ON UPDATE {SYSDATE | NOW | LOCALTIME | LOCALTIMESTAMP | CURRENT_DATE
|CURRENT_TIME | CURRENT_TIMESTAMP}
<​ссылочная целостность столбца​>::=
<​каскадные ограничения​>::=
[ON UPDATE {CASCADE | SET NULL | SET DEFAULT | {NO ACTION | RESTRICT}}]
[ON DELETE {CASCADE | SET NULL | SET DEFAULT | {NO ACTION | RESTRICT}}]
<​контролируемое значение столбца​>::=
<​значение из последовательности​>::=
GENERATED [{ALWAYS | BY DEFAULT}] AS IDENTITY (последовательность)
<​генерируемое значение​>::=
GENERATED {ALWAYS | BY DEFAULT} AS {логическое выражение | значимое выражение | SYS_GUID()}
<​начальное значение​>::=
<​нижняя граница​>::=
<​верхняя граница​>::=
<​ссылочная целостность​>::=
<​спецификация родительской таблицы​>::=
<​спецификация схемы таблицы​>::=
<​спецификация действий​>::=
[ON UPDATE {CASCADE | SET NULL | SET DEFAULT | {NO ACTION | RESTRICT}}]
[ON DELETE {CASCADE | SET NULL | SET DEFAULT | {NO ACTION | RESTRICT}}]
<​первичный ключ​>::=
PRIMARY KEY (имя столбца[, ...])
<​уникальный ключ​>::=
UNIQUE (имя столбца[, ...]|VALUE)
<​внешний ключ​>::=
<​логическое условие​>::=
<​спецификация параметров таблицы​>::=
<​последовательность​>::=
[START WITH начальное значение ] [INCREMENT BY шаг]
[MAXVALUE верхняя граница | NO MAXVALUE]
[MINVALUE нижняя граница | NO MINVALUE]
[CYCLE | NO CYCLE]
<​табличный параметр​>::=
{MAXROWID | MAXROW | PCTFILL | PCTFREE | BLOBPCT} беззнаковое целое
<​файловый параметр​>::=
{INDEXFILES | DATAFILES | BLOBFILES}
количество файлов [(описатель файла[, …])]
<​описатель файла​>::=
<​количество файлов​>::=
<​размер файла​>::=
<​синоним таблицы​>::=
<​загрузка таблицы​>::=
<​создание глобальной временной таблицы​>::=
<​действия при завершении транзакции​>::=
ON COMMIT {DELETE | PRESERVE} ROWS
<​создание копии базовой таблицы​>::=
CREATE [IF NOT EXISTS|OR REPLACE] TABLE целевая таблица LIKE исходная таблица
<​целевая таблица​>::=
<​исходная таблица​>::=
Синтаксические правила
  1. Опция IF NOT EXISTS отменяет выполнение оператора, если указанная таблица уже существует в БД.

  2. Опция OR REPLACE заставляет удалять существующую в БД таблицу (вместе со всеми её данными) и создавать новую таблицу под тем же именем, возможно, с новыми параметрами. На удаляемую таблицу не должно быть ссылок из других таблиц/представлений БД.

  3. Одновременное использование опций IF NOT EXISTS и OR REPLACE запрещено.

  4. Команда создания таблицы должна включать в себя, по крайней мере, одно <​определение столбца​>.

  5. Для создания таблицы пользователь должен иметь уровень прав RESOURCE или DBA.

  6. <​Имя таблицы​> должно быть уникальным среди имен существующих в БД таблиц, представлений или их синонимов в пределах <​имени схемы​> либо текущей схемы (при её отсутствии в спецификации).

    Примечание

    Ядро СУБД при выполнении SELECT-запросов, содержащих группировку или некоторые другие конструкции, создает для своих нужд временные таблицы с именами вида "Table#nnn#", где nnn – системный номер таблицы, поэтому, во избежание конфликтов, не рекомендуется давать пользовательским таблицам похожие имена.

Примеры
create or replace table Admin.Auto …
create if not exist table "Петров". Sale …
create or replace table "Ведомость товаров" as Year_Ved …